<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*
        构造函数模式
     */
    function Person(name, age, job) {
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function () {
            console.log(this.name)
        }
        // 与上面等价
        this.sayName2 = new Function('console.log(this.name)') ;// 逻辑等价
    }

    let person1 = new Person('jack', 11, '工人')
    let person2 = new Person('tom', 12, '资本家')
    console.log(person1)
    console.log([Person])
    console.log(person1.constructor === Person) // true
    person1.sayName2() // jack

    /*
        new操作符说明
            (1) 在内存中创建一个新对象。
            (2) 这个新对象内部的[[Prototype]]特性被赋值为构造函数的 prototype 属性。
            (3) 构造函数内部的 this 被赋值为这个新对象(即 this 指向新对象)。
            (4) 执行构造函数内部的代码(给新对象添加属性)。
            (5) 如果构造函数返回非空对象，则返回该对象;否则，返回刚创建的新对象。
     */


</script>
</body>
</html>